/*
 Navicat Premium Dump SQL

 Source Server         : local
 Source Server Type    : MySQL
 Source Server Version : 80030 (8.0.30)
 Source Host           : localhost:3306
 Source Schema         : interview

 Target Server Type    : MySQL
 Target Server Version : 80030 (8.0.30)
 File Encoding         : 65001

 Date: 12/12/2024 11:07:14
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for tb_knowledge_type
-- ----------------------------
DROP TABLE IF EXISTS `tb_knowledge_type`;
CREATE TABLE `tb_knowledge_type` (
  `id` int NOT NULL AUTO_INCREMENT,
  `title` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `displayNewFlag` tinyint(1) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- ----------------------------
-- Records of tb_knowledge_type
-- ----------------------------
BEGIN;
INSERT INTO `tb_knowledge_type` (`id`, `title`, `displayNewFlag`) VALUES (1, 'ArkTS', 1);
INSERT INTO `tb_knowledge_type` (`id`, `title`, `displayNewFlag`) VALUES (2, 'ArkUI', 1);
INSERT INTO `tb_knowledge_type` (`id`, `title`, `displayNewFlag`) VALUES (3, 'HTML', 0);
INSERT INTO `tb_knowledge_type` (`id`, `title`, `displayNewFlag`) VALUES (4, 'CSS', 0);
INSERT INTO `tb_knowledge_type` (`id`, `title`, `displayNewFlag`) VALUES (5, 'JavaScript', 0);
INSERT INTO `tb_knowledge_type` (`id`, `title`, `displayNewFlag`) VALUES (6, 'WeChat', 0);
INSERT INTO `tb_knowledge_type` (`id`, `title`, `displayNewFlag`) VALUES (7, 'Vue', 0);
INSERT INTO `tb_knowledge_type` (`id`, `title`, `displayNewFlag`) VALUES (8, 'Flutter', 0);
INSERT INTO `tb_knowledge_type` (`id`, `title`, `displayNewFlag`) VALUES (9, 'Dart', 0);
INSERT INTO `tb_knowledge_type` (`id`, `title`, `displayNewFlag`) VALUES (10, 'jQuery', 0);
INSERT INTO `tb_knowledge_type` (`id`, `title`, `displayNewFlag`) VALUES (11, 'Node.js', 0);
INSERT INTO `tb_knowledge_type` (`id`, `title`, `displayNewFlag`) VALUES (12, 'Express', 0);
INSERT INTO `tb_knowledge_type` (`id`, `title`, `displayNewFlag`) VALUES (13, '性能优化', 0);
INSERT INTO `tb_knowledge_type` (`id`, `title`, `displayNewFlag`) VALUES (14, '布局', 0);
INSERT INTO `tb_knowledge_type` (`id`, `title`, `displayNewFlag`) VALUES (15, '其他', 0);
COMMIT;

-- ----------------------------
-- Table structure for tb_question
-- ----------------------------
DROP TABLE IF EXISTS `tb_question`;
CREATE TABLE `tb_question` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '唯一标识',
  `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '题目',
  `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '答案内容',
  `like_content` int DEFAULT NULL COMMENT '点赞数量',
  `subject` int DEFAULT NULL COMMENT '所属知识分类',
  `views` int DEFAULT NULL COMMENT '浏览量',
  `difficulty` tinyint(1) DEFAULT NULL COMMENT '难度1-2简单，3-4一般，5-6困难',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- ----------------------------
-- Records of tb_question
-- ----------------------------
BEGIN;
INSERT INTO `tb_question` (`id`, `title`, `content`, `like_content`, `subject`, `views`, `difficulty`) VALUES (1, 'ArkTS中变量如何定义？', '在ArkTS中，变量定义使用`let`或`const`关键字。`let`用于定义可变变量，例如：`let variableName: type = value;`，`const`用于定义常量，定义后不可修改，例如：`const constantName: type = value;`。', 5, 1, 20, 1);
INSERT INTO `tb_question` (`id`, `title`, `content`, `like_content`, `subject`, `views`, `difficulty`) VALUES (2, 'ArkUI里某个常用组件如何使用？', '以Text组件为例，在ArkUI中使用Text组件来显示文本。首先要导入相关模块，然后在组件内部使用Text组件标签，如`<Text>这是要显示的文本</Text>`，并且可以通过样式属性来修改文本的颜色、大小等样式。', 3, 2, 15, 2);
INSERT INTO `tb_question` (`id`, `title`, `content`, `like_content`, `subject`, `views`, `difficulty`) VALUES (3, 'HTML中一些常用标签有什么作用及用法？', '例如`<p>`标签，用于定义段落，文本内容放在`<p>`和`</p>`之间。`<a>`标签用于创建超链接，通过`href`属性指定链接目标，如`<a href=\"https://example.com\">链接文本</a>`。`<img>`标签用于在网页中插入图片，通过`src`属性指定图片来源，如`<img src=\"image.jpg\" alt=\"图片描述\">`。', 4, 3, 30, 1);
INSERT INTO `tb_question` (`id`, `title`, `content`, `like_content`, `subject`, `views`, `difficulty`) VALUES (4, '如何通过CSS来实现页面元素的特定样式布局？', '可以使用CSS的`display`属性来控制元素的显示方式。例如，将`display`设置为`flex`可以创建一个弹性布局容器，通过`justify - content`和`align - items`等属性来控制子元素的对齐方式。还可以使用`margin`和`padding`属性来控制元素的外边距和内边距，从而调整布局。', 2, 4, 25, 2);
INSERT INTO `tb_question` (`id`, `title`, `content`, `like_content`, `subject`, `views`, `difficulty`) VALUES (5, 'JavaScript中函数的参数传递方式是怎样的？', 'JavaScript函数参数传递有按值传递和按引用传递。对于基本数据类型（如数字、字符串、布尔值）是按值传递，在函数内部修改参数的值不会影响外部变量的值。而对于对象和数组等复杂数据类型是按引用传递，在函数内部修改对象的属性或者数组的元素会影响外部的对象和数组。', 6, 5, 40, 3);
INSERT INTO `tb_question` (`id`, `title`, `content`, `like_content`, `subject`, `views`, `difficulty`) VALUES (6, 'WeChat小程序的页面跳转是如何实现的？', '在WeChat小程序中，页面跳转主要通过`wx.navigateTo()`、`wx.redirectTo()`和`wx.switchTab()`等API来实现。`wx.navigateTo()`用于保留当前页面，跳转到应用内的某个页面；`wx.redirectTo()`用于关闭当前页面，跳转到应用内的某个页面；`wx.switchTab()`用于跳转到小程序的tabBar页面。', 3, 6, 35, 2);
INSERT INTO `tb_question` (`id`, `title`, `content`, `like_content`, `subject`, `views`, `difficulty`) VALUES (7, 'Vue框架下不同组件之间通信有哪几种方式？', '在Vue中，父子组件通信可以通过`props`和`$emit`。父组件通过`props`向子组件传递数据，子组件通过`$emit`触发事件来向父组件传递数据。兄弟组件通信可以通过一个共同的父组件作为中介，或者使用`Vuex`状态管理库来实现数据共享和通信。', 5, 7, 50, 5);
INSERT INTO `tb_question` (`id`, `title`, `content`, `like_content`, `subject`, `views`, `difficulty`) VALUES (8, '在Flutter中如何构建一个简单的页面布局？', '在Flutter中，可以使用`Scaffold`作为页面的基本布局结构。在`Scaffold`中可以添加`appBar`（顶部导航栏）、`body`（页面主体内容）等部分。对于`body`部分，可以使用`Column`或`Row`等布局组件来排列子元素。例如，使用`Column`来垂直排列多个子元素，每个子元素之间可以设置间距等属性。', 4, 8, 45, 2);
INSERT INTO `tb_question` (`id`, `title`, `content`, `like_content`, `subject`, `views`, `difficulty`) VALUES (9, 'Dart语言有什么区别于其他语言的独特特性？', 'Dart的一个独特特性是它的`async`/`await`语法用于异步编程，使异步代码看起来更像同步代码，易于理解和维护。另外，Dart是强类型语言，但具有类型推断功能，在声明变量时可以省略类型，编译器会自动推断类型，提高了代码的简洁性。', 3, 9, 30, 3);
INSERT INTO `tb_question` (`id`, `title`, `content`, `like_content`, `subject`, `views`, `difficulty`) VALUES (10, '软件开发中有哪些通用但不好归类的小知识点？', '比如代码注释的重要性，良好的注释可以提高代码的可读性和可维护性。还有代码版本控制工具（如Git）的基本使用，像如何创建分支、提交代码、合并分支等操作。另外，软件开发中的命名规范也很重要，变量、函数、类等的命名应该清晰、准确地反映其功能。', 2, 15, 20, 1);
INSERT INTO `tb_question` (`id`, `title`, `content`, `like_content`, `subject`, `views`, `difficulty`) VALUES (11, 'ArkTS中类的继承如何实现？', '在ArkTS中，通过 `extends` 关键字来实现类的继承。例如，定义一个基类 `BaseClass`，然后创建一个子类 `SubClass` 继承它，像这样：`class SubClass extends BaseClass {}`，子类可以继承基类的属性和方法，并且能根据需求进行重写等操作。', 3, 1, 18, 2);
INSERT INTO `tb_question` (`id`, `title`, `content`, `like_content`, `subject`, `views`, `difficulty`) VALUES (12, 'ArkUI如何实现页面滚动效果？', '在ArkUI里，可以使用 `ScrollView` 组件来实现页面滚动效果。将需要滚动展示的内容放置在 `ScrollView` 组件内部，通过设置相关属性如 `scrollDirection`（滚动方向，可以是垂直或者水平等）来控制滚动行为，例如 `<ScrollView scrollDirection=\"vertical\">...</ScrollView>`。', 4, 2, 22, 2);
INSERT INTO `tb_question` (`id`, `title`, `content`, `like_content`, `subject`, `views`, `difficulty`) VALUES (13, 'HTML中表单元素怎么进行验证？', 'HTML中表单元素验证可以通过 HTML5 提供的一些内置属性来实现，比如 `required` 属性用于标记必填字段，当用户未填写该字段提交表单时会提示相应错误。还有 `pattern` 属性，可按照正则表达式来验证输入内容是否符合特定格式，像验证邮箱格式可以写成 `<input type=\"email\" pattern=\"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$\">`。', 5, 3, 35, 3);
INSERT INTO `tb_question` (`id`, `title`, `content`, `like_content`, `subject`, `views`, `difficulty`) VALUES (14, 'CSS如何实现动画效果？', '利用CSS的 `@keyframes` 规则结合 `animation` 属性来实现动画效果。首先通过 `@keyframes` 定义动画的关键帧，比如改变元素的位置、大小、颜色等属性在不同阶段的值，然后在元素上应用 `animation` 属性，指定动画名称、持续时间、动画方式等，例如：`@keyframes myAnimation { from { opacity: 0; } to { opacity: 1; } }.element { animation: myAnimation 2s ease-in-out; }`。', 3, 4, 28, 3);
INSERT INTO `tb_question` (`id`, `title`, `content`, `like_content`, `subject`, `views`, `difficulty`) VALUES (15, 'JavaScript中如何操作DOM元素？', '在JavaScript中，可以通过 `document` 对象来操作DOM元素。例如，使用 `document.getElementById()` 方法根据元素的 `id` 属性获取特定元素，然后可以修改其属性，像修改元素的 `innerHTML` 属性来改变其内部文本内容，`document.getElementById(\"myElement\").innerHTML = \"新的内容\";`，还可以通过 `document.createElement()` 创建新元素等操作。', 6, 5, 42, 3);
INSERT INTO `tb_question` (`id`, `title`, `content`, `like_content`, `subject`, `views`, `difficulty`) VALUES (16, 'WeChat小程序如何获取用户位置信息？', '在WeChat小程序中，要获取用户位置信息，首先需要在小程序配置文件中申请相应的权限（如 `scope.userLocation`），然后使用 `wx.getLocation()` API来获取经纬度等位置数据，示例代码如下：`wx.getLocation({ type: \"wgs84\", success: function (res) { console.log(res.latitude, res.longitude); } });`。', 4, 6, 30, 2);
INSERT INTO `tb_question` (`id`, `title`, `content`, `like_content`, `subject`, `views`, `difficulty`) VALUES (17, 'Vue中如何实现路由懒加载？', '在Vue项目中，路由懒加载可以通过 `import()` 函数结合 `Vue Router` 的配置来实现。例如，原本配置路由是直接引入组件 `const Home = require(\"./views/Home.vue\");`，改为懒加载的方式可以写成 `const Home = () => import(\"./views/Home.vue\");`，这样可以在需要访问对应路由时才加载组件，提高页面初始加载速度。', 5, 7, 48, 3);
INSERT INTO `tb_question` (`id`, `title`, `content`, `like_content`, `subject`, `views`, `difficulty`) VALUES (18, 'Flutter中如何实现图片加载与缓存？', '在Flutter中，可以使用 `cached_network_image` 库来实现图片的加载与缓存功能。首先要在项目中引入该库，然后使用 `CachedNetworkImage` 组件来加载网络图片，它会自动处理图片的缓存，例如：`<CachedNetworkImage imageUrl=\"https://example.com/image.jpg\" placeholder: (context, url) => CircularProgressIndicator(), errorWidget: (context, url, error) => Icon(IconData(0xe007, fontFamily: \"MaterialIcons\")), />`。', 3, 8, 36, 3);
INSERT INTO `tb_question` (`id`, `title`, `content`, `like_content`, `subject`, `views`, `difficulty`) VALUES (19, 'Dart中抽象类和接口有什么区别？', '在Dart中，抽象类使用 `abstract` 关键字定义，它可以有抽象方法（没有方法体的方法）也可以有具体的方法实现，并且抽象类不能被实例化，子类继承抽象类必须实现抽象类中的抽象方法。而接口通常是隐式定义的，只要一个类实现了接口中定义的所有方法就算实现了该接口，接口更强调一种行为规范，它的方法默认都是抽象的。', 4, 9, 25, 3);
INSERT INTO `tb_question` (`id`, `title`, `content`, `like_content`, `subject`, `views`, `difficulty`) VALUES (20, 'Node.js中如何搭建一个简单的HTTP服务器？', '在Node.js中，可以使用内置的 `http` 模块来搭建简单的HTTP服务器。首先通过 `http.createServer()` 方法创建服务器实例，然后定义一个回调函数来处理请求和响应，示例代码如下：`const http = require(\"http\"); const server = http.createServer((req, res) => { res.writeHead(200, { \"Content-Type\": \"text/plain\" }); res.end(\"Hello, World!\"); }); server.listen(8080);`。', 3, 11, 32, 2);
INSERT INTO `tb_question` (`id`, `title`, `content`, `like_content`, `subject`, `views`, `difficulty`) VALUES (21, '如何在 Vue 中使用 Vuex 进行状态管理？', '首先在项目中安装 Vuex，然后创建一个 store.js 文件。在该文件中定义 state 存储全局状态，mutations 用于修改状态，actions 用于处理异步操作等。在 Vue 组件中通过 `this.$store` 来访问和操作 store 中的数据，例如获取状态：`this.$store.state.someState`，提交 mutation：`this.$store.commit(\"someMutation\", payload)`。', 5, 7, 60, 3);
INSERT INTO `tb_question` (`id`, `title`, `content`, `like_content`, `subject`, `views`, `difficulty`) VALUES (22, '在 Node.js 中如何处理文件上传？', '可以使用 `multer` 中间件来处理文件上传。首先安装 `multer`，然后在 Express 应用中进行配置。例如：`const multer = require(\"multer\"); const upload = multer({ dest: \"uploads/\" });`，然后在路由处理函数中使用 `upload.single(\"file\")` 等方法来处理单个文件上传，文件会被保存到指定的 \"uploads/\" 目录下，并且可以在请求对象中获取上传文件的相关信息。', 4, 11, 50, 3);
INSERT INTO `tb_question` (`id`, `title`, `content`, `like_content`, `subject`, `views`, `difficulty`) VALUES (23, 'Flutter 中如何实现页面导航与路由？', '在 Flutter 中，可以使用 `Navigator` 类来实现页面导航。通过 `Navigator.push` 方法可以跳转到新的页面，例如 `Navigator.push(context, MaterialPageRoute(builder: (context) => NewPage()));`，并且可以在页面之间传递参数。还可以使用命名路由来更方便地管理页面导航，在 `MaterialApp` 的 `routes` 属性中定义命名路由，然后通过 `Navigator.pushNamed` 方法进行跳转。', 3, 8, 40, 2);
COMMIT;

-- ----------------------------
-- Table structure for tb_user
-- ----------------------------
DROP TABLE IF EXISTS `tb_user`;
CREATE TABLE `tb_user` (
  `id` int NOT NULL AUTO_INCREMENT,
  `username` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `password` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `avatar` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `nickName` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- ----------------------------
-- Records of tb_user
-- ----------------------------
BEGIN;
INSERT INTO `tb_user` (`id`, `username`, `password`, `avatar`, `nickName`) VALUES (1, 'admin', '123456', NULL, '超管');
COMMIT;

SET FOREIGN_KEY_CHECKS = 1;
